using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._MaritimeTools._S._57._Validation
{
    /// <summary>
    /// <para>Parse S-58 Log File</para>
    /// <para>Parses log files produced by the Validate S-57 File tool and third-party validation software against S-58 (recommended ENC validation checks). Critical errors and warnings are imported as records in a Data Reviewer table.</para>
    /// <para>根据 S-58 解析验证 S-57 文件工具和第三方验证软件生成的日志文件（推荐的 ENC 验证检查）。严重错误和警告将作为记录输入到 Data Reviewer 表中。</para>
    /// </summary>    
    [DisplayName("Parse S-58 Log File")]
    public class ParseS58LogFile : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ParseS58LogFile()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_s58_log_file">
        /// <para>Input S-58 Log File</para>
        /// <para>The S-58 log file that contains validation errors. It can be an *.S58, *.ANL, or *.VLD file.</para>
        /// <para>包含验证错误的 S-58 日志文件。它可以是 *。S58，*。ANL 或 *。VLD 文件。</para>
        /// </param>
        /// <param name="_in_s57_file">
        /// <para>Input S-57 File</para>
        /// <para>The base cell file (*.000) from which the validation result was produced. The name of the ENC cell referenced in this parameter must match the name of the ENC cell referenced in the validation log file.</para>
        /// <para>从中生成验证结果的基本单元文件 （*.000）。此参数中引用的 ENC 单元的名称必须与验证日志文件中引用的 ENC 单元的名称匹配。</para>
        /// </param>
        /// <param name="_in_production_database_workspace">
        /// <para>Production Database</para>
        /// <para>The workspace to validate and correct. This workspace contains the data used to generate the S-57 format file.</para>
        /// <para>要验证和更正的工作区。此工作区包含用于生成 S-57 格式文件的数据。</para>
        /// </param>
        /// <param name="_in_reviewer_workspace">
        /// <para>Data Reviewer Workspace</para>
        /// <para>The path to the Data Reviewer workspace where the features or table records will be written. A Data Reviewer workspace must be created for each ENC product.</para>
        /// <para>将写入要素或表记录的 Data Reviewer 工作空间的路径。必须为每个 ENC 产品创建一个 Data Reviewer 工作空间。</para>
        /// </param>
        /// <param name="_reviewer_session">
        /// <para>Data Reviewer Session</para>
        /// <para>An existing Data Reviewer session. The options are populated based on the sessions in the Data Reviewer workspace.</para>
        /// <para>现有 Data Reviewer 会话。这些选项将根据 Data Reviewer 工作空间中的会话进行填充。</para>
        /// </param>
        public ParseS58LogFile(object _in_s58_log_file, object _in_s57_file, object _in_production_database_workspace, object _in_reviewer_workspace, object _reviewer_session)
        {
            this._in_s58_log_file = _in_s58_log_file;
            this._in_s57_file = _in_s57_file;
            this._in_production_database_workspace = _in_production_database_workspace;
            this._in_reviewer_workspace = _in_reviewer_workspace;
            this._reviewer_session = _reviewer_session;
        }
        public override string ToolboxName => "Maritime Tools";

        public override string ToolName => "Parse S-58 Log File";

        public override string CallName => "maritime.ParseS58LogFile";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_s58_log_file, _in_s57_file, _in_production_database_workspace, _in_reviewer_workspace, _reviewer_session, _in_update_cells, _parse_count];

        /// <summary>
        /// <para>Input S-58 Log File</para>
        /// <para>The S-58 log file that contains validation errors. It can be an *.S58, *.ANL, or *.VLD file.</para>
        /// <para>包含验证错误的 S-58 日志文件。它可以是 *。S58，*。ANL 或 *。VLD 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input S-58 Log File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_s58_log_file { get; set; }


        /// <summary>
        /// <para>Input S-57 File</para>
        /// <para>The base cell file (*.000) from which the validation result was produced. The name of the ENC cell referenced in this parameter must match the name of the ENC cell referenced in the validation log file.</para>
        /// <para>从中生成验证结果的基本单元文件 （*.000）。此参数中引用的 ENC 单元的名称必须与验证日志文件中引用的 ENC 单元的名称匹配。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input S-57 File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_s57_file { get; set; }


        /// <summary>
        /// <para>Production Database</para>
        /// <para>The workspace to validate and correct. This workspace contains the data used to generate the S-57 format file.</para>
        /// <para>要验证和更正的工作区。此工作区包含用于生成 S-57 格式文件的数据。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Production Database")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_production_database_workspace { get; set; }


        /// <summary>
        /// <para>Data Reviewer Workspace</para>
        /// <para>The path to the Data Reviewer workspace where the features or table records will be written. A Data Reviewer workspace must be created for each ENC product.</para>
        /// <para>将写入要素或表记录的 Data Reviewer 工作空间的路径。必须为每个 ENC 产品创建一个 Data Reviewer 工作空间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Data Reviewer Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_reviewer_workspace { get; set; }


        /// <summary>
        /// <para>Data Reviewer Session</para>
        /// <para>An existing Data Reviewer session. The options are populated based on the sessions in the Data Reviewer workspace.</para>
        /// <para>现有 Data Reviewer 会话。这些选项将根据 Data Reviewer 工作空间中的会话进行填充。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Data Reviewer Session")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _reviewer_session { get; set; }


        /// <summary>
        /// <para>Update Cells</para>
        /// <para>The cell files (*.001 - *.999) that will be updated.</para>
        /// <para>将更新的单元格文件 （*.001 - *.999）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Cells")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _in_update_cells { get; set; } = null;


        /// <summary>
        /// <para>Log Parse Count</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Log Parse Count")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public long? _parse_count { get; set; }


        public ParseS58LogFile SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}